import { app, BrowserWindow, Tray, Menu, ipcMain, session, desktopCapturer, webContents, screen } from 'electron';
import { fileURLToPath } from 'node:url';
import path from 'path';
import Store from "electron-store"

const store = new Store();

let mainWindow;

// 获取当前文件的路径
const __filename = fileURLToPath(import.meta.url);
// 获取当前文件的目录
const __dirname = path.dirname(__filename);

let floatingWindow = null;


// 创建悬浮球窗口的函数
function createFloatingBall() {
    if (floatingWindow) return; // 防止重复创建
    try {
        // 获得屏幕尺寸
        const { width, height } = screen.getPrimaryDisplay().workAreaSize;
        // 从存储中获取上次的位置，如果没有则使用默认右下角位置
        const savedPosition = store.get('floatingBallPosition', {
            x: width - 300,  // 屏幕宽度 - 悬浮球宽度 - 边距
            y: height - 200  // 屏幕高度 - 悬浮球高度 - 边距
        });
        floatingWindow = new BrowserWindow({
            width: 500,
            height: 100,
            x: savedPosition.x,
            y: savedPosition.y,
            transparent: true,
            frame: false,
            alwaysOnTop: true,
            resizable: false,
            movable: true,
            show: false,        // 默认不显示
            skipTaskbar: false,     // 不在任务栏显示
            focusable: true,       // 获得聚焦
            webPreferences: {
                preload: path.join(__dirname, './preload.js'),
                contextIsolation: true,
                nodeIntegration: false
            }
        })
        // 加载悬浮球页面       开发环境加载
        floatingWindow.loadFile(path.join(__dirname, "../src/assets/html/floating-ball.html"))
        console.log('Floating ball HTML path:', path.join(__dirname, "../src/assets/html/floating-ball.html"));
        floatingWindow.on('closed', () => {
            floatingWindow = null;
        });
    } catch (error) {
        console.error(error)
    }
}

// 修改已有的 createWindow() 方法
const createWindow = () => {
    if (!mainWindow) {
        mainWindow = new BrowserWindow({
            width: 1200,
            height: 650,
            webPreferences: {
                preload: path.join(__dirname, 'preload.js'),
                contextIsolation: true
            },
            icon: path.join(__dirname, "../src/assets/icons/边牧.png"),
            autoHideMenuBar: true,
            minimizable: true,
            maximizable: true,
            frame: false,
            resizable: false,
            movable: true,
            contextIsolation: false,        // 禁用默认的上下文菜单
            contextMenu: false,
            contextIsolation: true,
            nodeIntegration: false,      // 禁用Node.js集成
            // backgroundColor: '#00000000'  // 窗口底色设置为透明色
            backgroundThrottling: false // 允许更精确地控制渲染进程的样式       后期再研究
        });
        mainWindow.loadURL('http://localhost:5173/');

        const contextMenu = createContextMenu();
        // 监听右键事件
        mainWindow.webContents.on('context-menu', (e, params) => {
            contextMenu.popup({
                window: mainWindow,
                x: params.x,
                y: params.y
            })
        })

    }
};

// 创建菜单模板
function createContextMenuTemplate() {
    return [
        {
            label: "复制",
            role: 'copy'
        },
        {
            label: "粘贴",
            role: 'paste'
        },
        {
            label: "刷新页面",
            click: () => {
                if (mainWindow) {
                    console.log("刷新了页面");
                    mainWindow.webContents.reload();
                }
            }
        },
        {
            label: "自定义选项",
            click: () => {
                console.log("自定义选项被点击了")
            }
        }
    ];
}

// 窗口拖动

// 创建菜单
function createContextMenu() {
    const contextMenuTemplate = createContextMenuTemplate();
    return Menu.buildFromTemplate(contextMenuTemplate);
}

// 创建系统托盘
function createTray() {
    // 托盘图标
    const iconPath = path.join(__dirname, "../src/assets/icons/边牧.png");
    // 托盘初始化
    const tray = new Tray(iconPath);
    const contextMenuTemplate = [
        {
            label: "显示应用",
            click: () => {
                if (mainWindow && mainWindow.isMinimized()) {
                    mainWindow.restore();
                } else if (!mainWindow || !mainWindow.isVisible()) {
                    createWindow();
                }
            }
        },
        {
            label: "退出",
            click: () => {
                app.quit();
            }
        },
        {
            label: "刷新页面",
            click: () => {
                if (mainWindow) {
                    mainWindow.webContents.reload();
                }
            }
        },
        {
            label: "检查更新",
            click: () => {
                // 在这里添加检查更新的逻辑
                console.log("检查更新");
            }
        },
        {
            label: "关于",
            click: () => {
                // 在这里添加关于的逻辑
                console.log("关于");
            }
        }
    ];
    const trayMenu = Menu.buildFromTemplate(contextMenuTemplate);
    tray.setContextMenu(trayMenu);
    tray.setToolTip("我的应用");
    tray.on('click', () => {
        if (mainWindow && mainWindow.isMinimized()) {
            mainWindow.restore();
        } else if (!mainWindow || !mainWindow.isVisible()) {
            createWindow();
        }
    })
}

// app.on('ready', () => {
//     // 在 app 模块的 ready 事件之后访问 session.defaultSession
//     session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
//         callback({
//             responseHeaders: {
//                 ...details.responseHeaders,
//                 'Content-Security-Policy': ['default-src \'self\'']
//             }
//         });
//     });
// });

app.whenReady().then(() => {
    createTray();
    createWindow();
    createFloatingBall();

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    })
    app.on('render-process-gone', (event, webContents, details) => {
        console.error('渲染进程崩溃:', details);
        if (webContents === floatingWindow?.webContents) {
            floatingWindow = null;
        }
    });
})

// 窗口最小化
ipcMain.on('minimize-window', () => {
    if (mainWindow) {
        mainWindow.minimize();
    }
})
// 窗口全屏
ipcMain.on('maximize-window', () => {
    if (mainWindow) {
        if (mainWindow.isFullScreen()) {
            mainWindow.setFullScreen(false); // 退出全屏
        } else if (mainWindow.isMaximized()) {
            mainWindow.unmaximize(); // 退出最大化
        } else {
            mainWindow.setFullScreen(true); // 进入全屏
        }
    }
});
// 退出窗口
ipcMain.on('edit-window', () => {
    mainWindow.close();
})


// 悬浮球控制/隐藏的IPC通信
ipcMain.on('toggle-floating-ball', (event, shouldShow) => {
    if (!floatingWindow) {
        createFloatingBall();
        if (!floatingWindow) return false;
    }
    if (shouldShow) {
        floatingWindow.show();
    } else {
        floatingWindow.hide();
    }
    console.log(floatingWindow.isVisible())
    console.log(floatingWindow.isVisible() ? '显示' : '隐藏')
})
// 获取悬浮窗状态
ipcMain.on('get-floating-ball-state', () => {
    return floatingWindow ? floatingWindow.isVisible() : false;
})






app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})